public interface DataConst
{
    //DATA_CATEGORY
    public static enum Category
    {
        MACHINE_OPERATION,
        PATH_PLANNING,
        AXIS_MOTION,
        PROGRAM_EXECUTION,
        SPINDLE,
        ATC,
        DEVICES,
        TOOL_HOLDER,
        OTHER;
    }
    //Data id
    public static enum Id
    {
        //MACHINE_OPERATION
        EMERGENCY_STOP(Category.MACHINE_OPERATION),
        OPERATION_MODE(Category.MACHINE_OPERATION),
        //PATH_PLANNING
        MOTION_TYPE(Category.PATH_PLANNING),
        CARTESIAN_PLANE(Category.PATH_PLANNING),
        METRIC_SYSTEM(Category.PATH_PLANNING),
        DIMENSIONING_MODE(Category.PATH_PLANNING),
        ATP(Category.PATH_PLANNING),
        PROGRAM_ZERO(Category.PATH_PLANNING),
        DEFAULT_METRIC_SYSTEM(Category.PATH_PLANNING),
        DEFAULT_DIMENSIONING_MODE(Category.PATH_PLANNING),
        WORK_OFFSET(Category.PATH_PLANNING),
        TOOL_OFFSET(Category.PATH_PLANNING),
        NUM_WORK_OFFSETS(Category.PATH_PLANNING),
        //AXIS_MOTION
        CUTTING_MODE(Category.AXIS_MOTION),
        FEEDRATE(Category.AXIS_MOTION),
        AXIS_LIMIT_SWITCH(Category.AXIS_MOTION),
        AXIS_CURRENT_POSITION(Category.AXIS_MOTION),
        AXIS_MOTION_TRAVEL_RANGE(Category.AXIS_MOTION),
        AXIS_REFERENCE_POINT_RETURN_DIRECTION(Category.AXIS_MOTION),
        ZERO_RETURN(Category.AXIS_MOTION),
        CUTTING_FEEDRATE_OVERRIDE(Category.AXIS_MOTION),
        RAPID_TRAVERSE_RATE_OVERRIDE(Category.AXIS_MOTION),
        JOG_FEEDRATE(Category.AXIS_MOTION),
        JOG_FEEDRATE_OVERRIDE(Category.AXIS_MOTION),
        HANDWHEEL_FACTOR(Category.AXIS_MOTION),
        HANDWHEEL_AXIS(Category.AXIS_MOTION),
        CUTTING_DATA_EDITOR(Category.AXIS_MOTION),
        JOG_DATA_EDITOR(Category.AXIS_MOTION),
        RTR_DATA_EDITOR(Category.AXIS_MOTION),
        ZRTR_DATA_EDITOR(Category.AXIS_MOTION),
        JOG_AXES(Category.AXIS_MOTION),
        DEFAULT_CUTTING_FEEDRATE(Category.AXIS_MOTION),
        MAXIMUM_CUTTING_FEEDRATE(Category.AXIS_MOTION),
        MAXIMUM_JOG_FEEDRATE(Category.AXIS_MOTION),        
        RAPID_TRAVERSE_RATE(Category.AXIS_MOTION),
        FAST_ZRTR(Category.AXIS_MOTION),
        MAXIMUM_TRAVERSE_RATE(Category.AXIS_MOTION),
        X_AXIS_MOTION_TRAVEL_RANGE(Category.AXIS_MOTION),
        Y_AXIS_MOTION_TRAVEL_RANGE(Category.AXIS_MOTION),
        Z_AXIS_MOTION_TRAVEL_RANGE(Category.AXIS_MOTION),
        X_AXIS_REFERENCE_POINT_RETURN_DIRECTION(Category.AXIS_MOTION),
        Y_AXIS_REFERENCE_POINT_RETURN_DIRECTION(Category.AXIS_MOTION),
        Z_AXIS_REFERENCE_POINT_RETURN_DIRECTION(Category.AXIS_MOTION),
        SLOW_ZRTR(Category.AXIS_MOTION),
        //PROGRAM_EXECUTION
        JOB_NAME(Category.PROGRAM_EXECUTION),
        MACHINING_CYCLE_STATUS(Category.PROGRAM_EXECUTION),
        BLOCK_EXECUTION(Category.PROGRAM_EXECUTION),
        OPTIONAL_STOP(Category.PROGRAM_EXECUTION),
        BLOCK_SKIP(Category.PROGRAM_EXECUTION),
        DRY_RUN(Category.PROGRAM_EXECUTION),
        MST_LOCK(Category.PROGRAM_EXECUTION),
        XY_AXES_LOCK(Category.PROGRAM_EXECUTION),
        Z_AXIS_NEGLECT(Category.PROGRAM_EXECUTION),
        //SPINDLE
        SPINDLE(Category.SPINDLE),
        SPINDLE_MOTION(Category.SPINDLE),
        SPINDLE_DIRECTION(Category.SPINDLE),
        SPINDLE_SPEED_OVERRIDE(Category.SPINDLE),
        SPINDLE_SPEED(Category.SPINDLE),
        MINIMUM_SPINDLE_SPEED(Category.SPINDLE),
        MAXIMUM_SPINDLE_SPEED(Category.SPINDLE),
        MINIMUM_SPINDLE_SPEED_OVERRIDE(Category.SPINDLE),
        MAXIMUM_SPINDLE_SPEED_OVERRIDE(Category.SPINDLE),
        //ATC
        TOOL_DATA_EDITOR(Category.ATC),
        TOOL_MAGAZINE_CAPACITY(Category.ATC),
        MAXIMUM_TOOL_INDEX(Category.ATC),
        TOOL_SELECTION_TYPE(Category.ATC),
        SELECTED_TOOL_INDEX(Category.ATC),
        NEXT_TOOL_INDEX(Category.ATC),
        //DEVICES
        DEVICES(Category.DEVICES),
        NUMBER_OF_DEVICES(Category.DEVICES),
        //TOOL_HOLDER
        TOOL_HOLDER_DATA_EDITOR(Category.TOOL_HOLDER),
        MAXIMUM_TOOL_DIAMETER(Category.TOOL_HOLDER),
        MAXIMUM_TOOL_LENGTH(Category.TOOL_HOLDER),
        //OTHER
        OTHER(Category.OTHER);
        Category category;
        Id(Category category_)
        {
            category = category_;
        }
        public Category getCategory()
        {
            return category;
        }
    }
    //DATA_CATEGORY
    public static final int MACHINE_OPERATION = 0x00;
    public static final int PATH_PLANNING = 0x01;
    public static final int AXIS_MOTION = 0x02;
    public static final int PROGRAM_EXECUTION = 0x03;
    public static final int SPINDLE = 0x04;
    public static final int ATC = 0x05;
    public static final int DEVICES = 0x06;
    public static final int TOOL_HOLDER = 0x07;
    public static final int OTHER = 0x08;
    //PATH_PLANNING
    public static final int MOTION_TYPE = 0x10;
    public static final int CARTESIAN_PLANE = 0x11;
    public static final int DEFAULT_METRIC_SYSTEM = 0x4E;
    public static final int METRIC_SYSTEM = 0x12;
    public static final int DIMENSIONING_MODE = 0x13;
    public static final int DEFAULT_DIMENSIONING_MODE = 0x50;
    public static final int ATP_X = 0x16;
    public static final int ATP_Y = 0x17;
    public static final int ATP_Z = 0x18;
    public static final int ACTIVE_WORK_OFFSET_INDEX = 0x19;
    public static final int ACTIVE_TOOL_OFFSET_INDEX = 0x1A;
    public static final int NUM_WORK_OFFSETS = 0x4F;
    public static final int WORK_OFFSET = 0x51;
    public static final int TOOL_OFFSET = 0x52;
    //AXIS_MOTION
    public static final int MAXIMUM_CUTTING_FEEDRATE = 0x35;
    public static final int DEFAULT_CUTTING_FEEDRATE = 0x34;
    public static final int CUTTING_MODE = 0x14;
    public static final int CUTTING_FEEDRATE = 0x1B;
    public static final int X_LEFT_AXIS_HARD_LIMIT_SWITCH = 0x2B;
    public static final int X_RIGHT_AXIS_HARD_LIMIT_SWITCH = 0x2C;
    public static final int Y_LEFT_AXIS_HARD_LIMIT_SWITCH = 0x2D;
    public static final int Y_RIGHT_AXIS_HARD_LIMIT_SWITCH = 0x2E;
    public static final int Z_LEFT_AXIS_HARD_LIMIT_SWITCH = 0x2F;
    public static final int Z_RIGHT_AXIS_HARD_LIMIT_SWITCH = 0x30;
    public static final int X_AXIS_CURRENT_POSITION = 0x20;
    public static final int Y_AXIS_CURRENT_POSITION = 0x21;
    public static final int Z_AXIS_CURRENT_POSITION = 0x22;
    public static final int X_AXIS_MOTION_TRAVEL_RANGE = 0x3D;
    public static final int Y_AXIS_MOTION_TRAVEL_RANGE = 0x3E;
    public static final int Z_AXIS_MOTION_TRAVEL_RANGE = 0x3F;
    public static final int X_AXIS_REFERENCE_POINT_RETURN_DIRECTION = 0x40;
    public static final int Y_AXIS_REFERENCE_POINT_RETURN_DIRECTION = 0x41;
    public static final int Z_AXIS_REFERENCE_POINT_RETURN_DIRECTION = 0x42;
    public static final int CUTTING_FEEDRATE_OVERRIDE = 0x1C;
    public static final int RAPID_TRAVERSE_RATE = 0x38;
    public static final int RAPID_TRAVERSE_RATE_OVERRIDE = 0x1E;
    public static final int MAXIMUM_TRAVERSE_RATE = 0x3C;
    public static final int JOG_FEEDRATE = 0x36;
    public static final int JOG_FEEDRATE_OVERRIDE = 0x1D;
    public static final int MAXIMUM_JOG_FEEDRATE = 0x37;
    public static final int FAST_ZRTR = 0x3A;
    public static final int SLOW_ZRTR = 0x3B;
    public static final int HOMING_HIGH_TRAVERSE_RATE = 0x32;
    public static final int HOMING_LOW_TRAVERSE_RATE = 0x33;
    //PROGRAM_EXECUTION
    public static final int MACHINING_CYCLE_STATUS = 0x23;
    public static final int BLOCK_EXECUTION = 0x24;
    public static final int OPTIONAL_STOP = 0x25;
    public static final int BLOCK_SKIP = 0x26;
    public static final int DRY_RUN = 0x27;
    public static final int MST_LOCK = 0x28;
    public static final int XY_AXES_LOCK = 0x29;
    public static final int Z_AXIS_NEGLECT = 0x2A;
    //SPINDLE
    public static final int MINIMUM_SPINDLE_SPEED = 0x43;
    public static final int MAXIMUM_SPINDLE_SPEED = 0x44;
    public static final int MINIMUM_SPINDLE_SPEED_OVERRIDE = 0x45;
    public static final int MAXIMUM_SPINDLE_SPEED_OVERRIDE = 0x46;
    //ATC
    public static final int TOOL_MAGAZINE_CAPACITY = 0x47;
    public static final int MAXIMUM_TOOL_INDEX = 0x48;
    public static final int TOOL_SELECTION_TYPE = 0x49;
    public static final int SELECTED_TOOL_INDEX = 0x4A;
    public static final int NEXT_TOOL_INDEX = 0x31;
    //DEVICES
    public static final int NUMBER_OF_DEVICES = 0x4D;
    //TOOL_HOLDER
    public static final int MAXIMUM_TOOL_DIAMETER = 0x4B;
    public static final int MAXIMUM_TOOL_LENGTH = 0x4C;
}
